package com.multi.source.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.multi.common.utils.DateUtils;
import com.multi.common.utils.SecurityUtils;
import com.multi.tenant.resp.LabelResp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.multi.source.mapper.BkDataBaseInfoMapper;
import com.multi.source.domain.BkDataBaseInfo;
import com.multi.source.service.IBkDataBaseInfoService;

/**
 * 数据库概要Service业务层处理
 *
 * @author pzj
 * @date 2024-11-20
 */
@Service
public class BkDataBaseInfoServiceImpl implements IBkDataBaseInfoService {
    @Autowired
    private BkDataBaseInfoMapper bkDataBaseInfoMapper;

    /**
     * 查询数据库概要
     *
     * @param id 数据库概要主键
     * @return 数据库概要
     */
    @Override
    public BkDataBaseInfo selectBkDataBaseInfoById(Long id) {
        return bkDataBaseInfoMapper.selectBkDataBaseInfoById(id);
    }

    /**
     * 查询数据库概要列表
     *
     * @param bkDataBaseInfo 数据库概要
     * @return 数据库概要
     */
    @Override
    public List<BkDataBaseInfo> selectBkDataBaseInfoList(BkDataBaseInfo bkDataBaseInfo) {
        return bkDataBaseInfoMapper.selectBkDataBaseInfoList(bkDataBaseInfo);
    }

    /**
     * 新增数据库概要
     *
     * @param bkDataBaseInfo 数据库概要
     * @return 结果
     */
    @Override
    public int insertBkDataBaseInfo(BkDataBaseInfo bkDataBaseInfo) {
        bkDataBaseInfo.setCreateTime(DateUtils.getNowDate());
        bkDataBaseInfo.setCreateBy(SecurityUtils.getUsername());
        return bkDataBaseInfoMapper.insertBkDataBaseInfo(bkDataBaseInfo);
    }

    /**
     * 修改数据库概要
     *
     * @param bkDataBaseInfo 数据库概要
     * @return 结果
     */
    @Override
    public int updateBkDataBaseInfo(BkDataBaseInfo bkDataBaseInfo) {
        bkDataBaseInfo.setUpdateTime(DateUtils.getNowDate());
        bkDataBaseInfo.setUpdateBy(SecurityUtils.getUsername());
        return bkDataBaseInfoMapper.updateBkDataBaseInfo(bkDataBaseInfo);
    }

    /**
     * 批量删除数据库概要
     *
     * @param ids 需要删除的数据库概要主键
     * @return 结果
     */
    @Override
    public int deleteBkDataBaseInfoByIds(Long[] ids) {
        return bkDataBaseInfoMapper.deleteBkDataBaseInfoByIds(ids);
    }

    /**
     * 删除数据库概要信息
     *
     * @param id 数据库概要主键
     * @return 结果
     */
    @Override
    public int deleteBkDataBaseInfoById(Long id) {
        return bkDataBaseInfoMapper.deleteBkDataBaseInfoById(id);
    }

    /**
     * 查询数据库Ip信息
     *
     * @return
     */
    @Override
    @Cacheable(value = "dbIpList")
    public List<LabelResp> getDbIpOption() {
        List<BkDataBaseInfo> bkDataBaseInfos = bkDataBaseInfoMapper.selectBkDataBaseInfoList(null);
        List<LabelResp> labelResps = new ArrayList<>();
        for (BkDataBaseInfo bkDataBaseInfo : bkDataBaseInfos) {
            LabelResp labelResp = new LabelResp().setLabel(bkDataBaseInfo.getDbIp())
                    .setValue(bkDataBaseInfo.getDbIp());
            labelResps.add(labelResp);
        }
        return labelResps;
    }

    /**
     * 查询数据库端口数据信息
     *
     * @param dbIp
     * @return
     */
    @Override
    public List<LabelResp> getDbPortOption(String dbIp) {
        BkDataBaseInfo bkDataBaseInfo = new BkDataBaseInfo();
        bkDataBaseInfo.setDbIp(dbIp);
        List<BkDataBaseInfo> bkDataBaseInfos = bkDataBaseInfoMapper.selectBkDataBaseInfoList(bkDataBaseInfo);
        List<LabelResp> labelResps = new ArrayList<>();
        for (BkDataBaseInfo dataBaseInfo : bkDataBaseInfos) {
            LabelResp labelResp = new LabelResp().setLabel(dataBaseInfo.getDbPort().toString())
                    .setValue(dataBaseInfo.getDbPort());
            labelResps.add(labelResp);
        }
        return labelResps;
    }

    /**
     * 新增对应的业务数据库数量
     *
     * @param dbIp
     * @param dbPort
     * @return
     */
    @Override
    public int addServiceDbNums(String dbIp, String dbPort) {
        return bkDataBaseInfoMapper.addServiceDbNums(dbIp, dbPort);
    }

}
